Make the dry_run action accept an event payload

Akinori MUSHA 9 years ago
parent
commit
fe857bc6f0
2 changed files with 20 additions and 1 deletions
  1. 7 1
      app/controllers/agents_controller.rb
  2. 13 0
      spec/controllers/agents_controller_spec.rb

+ 7 - 1
app/controllers/agents_controller.rb

@@ -50,7 +50,13 @@ class AgentsController < ApplicationController
50 50
     agent.name ||= '(Untitled)'
51 51
 
52 52
     if agent.valid?
53
-      results = agent.dry_run!
53
+      if event_payload = params[:event]
54
+        dummy_agent = Agent.build_for_type('ManualEventAgent', current_user, name: 'Dry-Runner')
55
+        dummy_agent.readonly!
56
+        event = dummy_agent.events.build(user: current_user, payload: event_payload)
57
+      end
58
+
59
+      results = agent.dry_run!(event)
54 60
 
55 61
       render json: {
56 62
         log: results[:log],

+ 13 - 0
spec/controllers/agents_controller_spec.rb

@@ -377,6 +377,19 @@ describe AgentsController do
377 377
         [users(:bob).agents.count, users(:bob).events.count, users(:bob).logs.count, agent.name, agent.updated_at]
378 378
       }
379 379
     end
380
+
381
+    it "accepts an event" do
382
+      sign_in users(:bob)
383
+      agent = agents(:bob_website_agent)
384
+      url_from_event = "http://xkcd.com/?from_event=1".freeze
385
+      expect {
386
+        post :dry_run, id: agent, event: { url: url_from_event }
387
+      }.not_to change {
388
+        [users(:bob).agents.count, users(:bob).events.count, users(:bob).logs.count, agent.name, agent.updated_at]
389
+      }
390
+      json = JSON.parse(response.body)
391
+      expect(json['log']).to match(/^I, .* : Fetching #{Regexp.quote(url_from_event)}$/)
392
+    end
380 393
   end
381 394
 
382 395
   describe "DELETE memory" do